package org.x.user.dto;

import jakarta.validation.constraints.Pattern;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import io.swagger.v3.oas.annotations.media.Schema;

/**
 * 用户信息入参实体类
 *
 * @author 夏包包
 * @date 2025-03-08 13:39:03
 */
@Data
public class UserDTO {

    /**
     * 用户ID:用户ID，必填
     */
    @NotBlank(groups = { DeleteGroup.class, UpdateGroup.class }, message = "用户ID不能为空")
    @Schema(description = "用户ID:用户ID，必填")
    private String userId;

    /**
     * 用户名:用户名，必填
     */
    @NotBlank(groups = { CreateGroup.class, UpdateGroup.class }, message = "用户名不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9_]{1,255}$", groups = { CreateGroup.class, UpdateGroup.class }, message = "用户名只能包含字母、数字和下划线，长度在1到255之间")
    @Schema(description = "用户名:用户名，必填")
    private String username;

    /**
     * 密码:密码，必填
     */
    @NotBlank(groups = { CreateGroup.class, UpdateGroup.class }, message = "密码不能为空")
    @Schema(description = "密码:密码，必填")
    private String password;

    /**
     * 用户描述:用户描述
     */
    @Schema(description = "用户描述:用户描述")
    private String userDesc;

    /**
     * 所属租户:所属租户
     */
    @Schema(description = "所属租户:所属租户")
    private String tenantId;

    /**
     * 昵称:昵称
     */
    @Schema(description = "昵称:昵称")
    private String nickName;

    /**
     * 邮箱:邮箱
     */
    @Schema(description = "邮箱:邮箱")
    private String email;

    /**
     * 手机号:手机号
     */
    @Schema(description = "手机号:手机号")
    private String phone;

    /**
     * 用户状态:用户状态
     */
    @Schema(description = "用户状态:用户状态")
    private String status;

    /**
     * 主部门ID:主部门ID
     */
    @Schema(description = "主部门ID:主部门ID")
    private String mainDeptId;

    /**
     * 本地语言:本地语言
     */
    @Schema(description = "本地语言:本地语言")
    private String locale;
}
